//自己写的
#include <iostream>
using namespace std;
#include<vector>
const int maxn=2e5+10;
vector<int> son[maxn];
int c[maxn],f;
int main()
{

  int n,ans=0;
  cin>>n;
  for(int i=1,f;i<=n;++i)
	{
		cin>>c[i]>>f;
		son[f].push_back(i);
	}

  for(int i=1;i<=n;i++)
  {
    for(int j=i+1;j<n;j++)
      if(c[i]==c[j])
        ans++;
    if(!son[i].size())
		ans++;
	
	}

  
    cout<<ans<<endl;
  return 0;
}
//网上答案
#include <bits/stdc++.h>
using namespace std;
const int N=200010;//节点的最大数量
unordered_map<int,int>sum[N],cnt[N];
int col[N];//每个节点的颜色
vector<int>e[N];//树的边
int ans=0;//最终答案
int n;//节点数量

void dfs(int u)
{
  cnt[u][col[u]]++;
  sum[u][1]++;
  for(auto k:e[u]){//遍历节点u的相邻节点k
    dfs(k);
    if(cnt[k].size()>cnt[u].size()){
      swap(cnt[k],cnt[u]);
      swap(sum[k],sum[u]);
    }
    for(auto c:cnt[k]){//遍历节点k的cnt数组中的元素
      int co=c.first,cn=c.second;
      if(cnt[u].count(co)&&!--sum[u][cnt[u][co]]){//如果节点u的cnt数组中存在键为co的元素，并且对应的sum数组的值减到0，则删除该元素
        sum[u].erase(cnt[u][co]);
      }
      cnt[u][co]+=cn;
      sum[u][cnt[u][co]]++;
    }
  }
  if(sum[u].size()==1){
    ans++;
  }
}

int main()
{
  cin>>n;
  for(int i=1;i<=n;i++){
    int a;
    cin>>col[i]>>a;
    e[a].push_back(i);//构建树的边
  }
  dfs(1);
  cout<<ans;
  return 0;
}